package com.lmf.plus.auto;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class AutoGenerate{

    public static void main(String[] args) {

        //创建AutoGenerator ,MP中对象
        AutoGenerator ag=new AutoGenerator();

        //全局配置
        GlobalConfig gc=new GlobalConfig();
        //设置代码的生成位置， 磁盘的目录
        String path=System.getProperty("user.dir");//获取当前项目的工程目录
        //设置输出目录
        gc.setOutputDir(path+"/01-plus-first/src/main/java");//配置具体的输出目录

        //设置生成的类的名称:
        // %s ：表示数据库中表的名字，也就是数据库中表对应的实体类名称
        gc.setMapperName("%sMapper");//所有的Dao类都是Mapper结尾的，例如DeptMapper
        //设置service接口的命名
        gc.setServiceName("%sService");
        //设置service接口实现类的命名
        gc.setServiceImplName("%sServiceImpl");
        //设置Controller类的命名
        gc.setControllerName("%sController");//DeptController
        //设置作者
        gc.setAuthor("刘明福");
        //设置主键id的配置
        gc.setIdType(IdType.AUTO);
        //将 GlobalConfig，封装进全局变量
        ag.setGlobalConfig(gc);

        //设置数据源：DataSource
        DataSourceConfig ds=new DataSourceConfig();
        ds.setDriverName("com.mysql.cj.jdbc.Driver");//加载驱动
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/springdb");//数据库连接地址
        ds.setUsername("root");//数据库用户名
        ds.setPassword("552200");//数据库密码
        //将数据源 DataSource，封装进全局变量
        ag.setDataSource(ds);

        //设置package信息
        PackageConfig pc=new PackageConfig();
        //设置模块名称， 相当于包名， 在这个包的下面有 mapper， service， controller。
        pc.setModuleName("order");
        //设置父包名，order就在父包的下面生成
        pc.setParent("com.lmf.plus");
        //将package信息，封装进全局变量
        ag.setPackageInfo(pc);

        //设置策略
        StrategyConfig sc  = new StrategyConfig();
        //设置策略名称
        sc.setNaming(NamingStrategy.underline_to_camel);
        //设置支持驼峰的命名规则
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        //将设置策略封装进全局变量
        ag.setStrategy(sc);

        //执行代码的生成
        ag.execute();
    }
}
